package com.cyj.springbootservice.controller.nearby;

import com.cyj.springbootservice.api.entity.PostInfo;
import com.cyj.springbootservice.service.PostInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @description: Redis+GeoHash
 * 添加用户坐标信息到redis（GEOADD），redis会将经纬度参数值转换为52位的geoHash码，
 * <p>
 * Redis以geoHash码为score，将其他信息以Zset有序集合存入key中
 * <p>
 * 通过调用GEORADIUS命令，获取指定坐标点某一范围内的数据
 * <p>
 * 因geoHash存在精度误差，剔除超过指定距离的数据
 * @Author C_Y_J
 * @create 2021/10/18 10:04
 **/
@RestController
@RequestMapping("/post3")
public class PostInfo3Controller {

    @Autowired
    private PostInfoService postInfoService;


    /**
     * 保存
     *
     * @param postInfo
     * @return
     */
    @PostMapping("/save")
    public boolean add(@RequestBody PostInfo postInfo) {
        return postInfoService.submit(postInfo);
    }

    /**
     * 获取附近x米的人
     *
     * @param distance      距离范围 单位km
     * @param userLongitude 当前经度
     * @param userLatitude  当前纬度
     * @return json
     */
    @GetMapping("/nearby")
    public List<PostInfo> nearBySearch(@RequestParam("distance") double distance,
                                       @RequestParam("userLongitude") double userLongitude,
                                       @RequestParam("userLatitude") double userLatitude) {
        return postInfoService.nearBySearch(distance, userLongitude, userLatitude);
    }
}
